package com.xaicode.auth.entity;

import com.xaicode.auth.base.BaseEntity;
import com.xaicode.auth.constant.EnableEnum;
import com.xaicode.auth.enums.MenuType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 菜单信息
 * 
 * @date 2024/12/6
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_menu")
public class SysMenu extends BaseEntity {

    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 父菜单ID
     */
    private Integer parentId;

    /**
     * 菜单类型
     *
     * @see MenuType#getValue()
     */
    private Integer menuType;

    /**
     * 菜单名称
     */
    private String menuName;

    /**
     * 菜单图标
     */
    private String menuIcon;

    /**
     * 显示顺序
     */
    private Integer sortNum;

    /**
     * 菜单对应的后台权限标识
     */
    private String permission;

    /**
     * 是否启用
     *
     * @see EnableEnum#ENABLE
     * @see EnableEnum#DISABLE
     */
    private Integer status;


    /**
     * 菜单对应的前端路由地址
     */
    private String path;
    /**
     * 菜单对应的前端组件名称
     */
    private String componentName;
    /**
     * 菜单对应的前端组件路径
     */
    private String component;

    /**
     * 是否固定
     */
    private Boolean affix;
    /**
     * 是否显示
     */
    private Boolean visible;
    /**
     * 是否缓存
     */
    private Boolean cache;
    /**
     * 是否显示小红点
     */
    private Boolean dot;
    /**
     * 徽标内容
     */
    private String badge;

    /**
     * 菜单对应前端操作是否以内嵌形式执行
     */
    private Boolean embed;
    /**
     * 以内嵌形式执行的地址
     */
    private String embedUrl;

    /**
     * 是否显示Header
     */
    private Boolean showHeader;
    /**
     * 是否显示Footer
     */
    private Boolean showFooter;
    /**
     * 是否在只有一个子菜单时保持显示
     * true: 保持显示
     * false: 隐藏该菜单并在该菜单的位置显示该菜单的子菜单
     */
    private Boolean alwaysShow;

    /**
     * 备注
     */
    private String remark;
}
